package lesson02;

/**
 * 通过interrupted方法实现线程中断
 *
 * @author wileda
 * @date 2023/01/05  10:09
 */
public class Demo06 {
    public static void main(String[] args) throws InterruptedException {

        Thread thread = new Thread(() -> {
            // 判断当前线的isInterrupted, (线程内部维护的一个中断标识)
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("hello thread...");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    // 处理中断逻辑
                    // [方式一]： 什么也不干，不理理会
                    // [方式二]： 一会处理
                    // [方式三]： 真正的中断操作
                    break;
                }
            }
            System.out.println("线程执行完成");
        });
        System.out.println("启动之前线程状态：" + thread.getState());
        System.out.println("启动之前是否存活：" + thread.isAlive());
        // 启动线程
        thread.start();
        Thread.sleep(100);
        System.out.println("启动之后线程状态：" + thread.getState());
        System.out.println("启动之后是否存活：" + thread.isAlive());
        // 让线程执行一会
        Thread.sleep(5000);
        // 中断线程
        thread.interrupt(); // 调本地方法让PCB完成中断
        // 等线程销毁
        Thread.sleep(1000);
        System.out.println("中断之后线程状态：" + thread.getState());
        System.out.println("中断之后是否存活：" + thread.isAlive());

    }
}
